// 简化空值判断补充

interface Activity {
    id: number
    access?: {
        has_access: boolean
    }
}
// activity在请求回来之前是null
let activity: Activity | null = null

// 判断是否具有访问权限，只有当access的has_access属性为true时才表示有权限
function isCurrentActivityHasAccess(activity: Activity) {
    // 方法1：为了不报 can not read property 'xxx' of undefined，我每一层都判断一下
    // return (activity && activity.access && activity.access.has_access) || false
    
    // 方法2：用?.做短路
    return activity?.access?.has_access ?? false
}

// isCurrentActivityHasAccess(activity)

activity = getActivityInfo()
isCurrentActivityHasAccess(activity)

activity = getActivityInfov2()
isCurrentActivityHasAccess(activity)


// v1版本接口没有access字段
function getActivityInfo(): Activity {
    return {
        id: 100
    }
}
// v2版本接口有access字段
function getActivityInfov2(): Activity {
    return {
        id: 100,
        access: {
            has_access: true
        }
    }
}